package com.dqyt.khjc.service;

import com.alibaba.fastjson.JSON;
import com.dqyt.app.bean.Sample;
import com.dqyt.common.check.CheckTool;
import com.dqyt.common.constant.AuthorityID;
import com.dqyt.common.constant.Opt;
import com.dqyt.common.utils.StringUtil;
import com.dqyt.common.utils.UserInfoUtil;
import com.dqyt.khjc.bean.*;
import com.dqyt.khjc.mapper.HistoryMapper;
import com.dqyt.khjc.mapper.RoleMapper;
import com.dqyt.khjc.swicth.SwitchConfig;
import com.dqyt.khjc.utils.IpUtil;
import com.dqyt.khjc.utils.TimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.sql.Time;
import java.util.List;

@Service
public class RoleService {

    @Autowired
    private RoleMapper roleMapper;

    @Autowired
    private HistoryMapper historyMapper;


    /**
     * 获取游客权限信息
     */
    public TouristRole getTouristRoles() {
        return roleMapper.getTouristRoles();
    }
    /**

     * 获取角色列表
     * @param request
     * @return
     */
    public ResultMsg getRoleList(HttpServletRequest request){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_XZYH)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }
            //查询 所有角色信息
            List<Role> roles = roleMapper.getRoleListToName();
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("成功");
            ret.setData(roles);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;

    }




    /**
     * 获取角色列表
     * @param request
     * @return
     */
    public ResultMsg getRoleList2(HttpServletRequest request){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_YHYL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }
            //查询 所有角色信息
            List<Role> roles = roleMapper.getRoleListToName();
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("成功");
            ret.setData(roles);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;

    }



    /**
     * 获取角色列表
     * @param request
     * @return
     */
    public ResultMsg getRoleList3(HttpServletRequest request){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_JSGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }
            //查询 所有角色信息
            List<Role> roles = roleMapper.getRoleList();
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("成功");
            ret.setData(roles);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;

    }

    /**
     * 分页查询角色
     * @param request
     * @param page
     * @param size
     * @param roleName
     * @return
     */
    public  ResultMsg  getRoleListPage(HttpServletRequest request,Integer page,Integer size,String roleName){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_JSGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }

            if (page != null && size != null) {
                page = (page - 1) * size;
            }
            List<Role> datas = roleMapper.getRoleListPage(page,size,roleName);
            long total = roleMapper.getTotalRoleNumber(roleName);
            RespPageBean bean = new RespPageBean();
            bean.setData(datas);
            bean.setTotal(total);
            ret.setCode(ResultMsg.SUCESS);
            ret.setData(bean);


        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }

    /**
     * 新增角色
     * @param request
     * @param roleName
     * @param rolelBz
     * @return
     */
    public  ResultMsg  addRole(HttpServletRequest request,String  roleName,String rolelBz){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_JSGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }

            if(null  == roleName ||"".equals(roleName)){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("非法操作");
                return ret;
            }

            //查询老的角色
            Role role =  roleMapper.getRoleByName(roleName);
            if(null != role){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("该角色已经存在");
                return ret;
            }

            Role role2 = new Role();
            role2.setRoleName(roleName);
            role2.setRolelBz(rolelBz);
            role2.setLoginStatue(1);
            role2.setIsdelete(1);
            long mtime = TimeUtil.currentTimeMillis();
            role2.setAddTime(mtime);
            role2.setAddUser(user.getUserId()+"");
            role2.setUpdateTime(mtime);
            role2.setUpdateUser(user.getUserId()+"");
            int res = roleMapper.addRole(role2);
            if (res <= 0) {
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("数据异常");
                return ret;
            }
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("添加成功");
            //如果操作日志的开关已经打开
            if(SwitchConfig.isOpen(SwitchConfig.ID_CZRZ)){
                //添加操作记录
                // 先取得用户ip
                String ip = IpUtil.getIpAddr(request);
                HistoryBean historyBean = new HistoryBean();
                historyBean.setMessage("[" + user.getUserName() + "] 添加了新角色： [" + roleName + "] ");
                historyBean.setType(Opt.YHGL_JSGL_TJJJ);
                historyBean.setOpUserId(user.getUserId());
                historyBean.setIp(ip);
                historyBean.setBopId(String.valueOf(role2.getRoleId()));
                historyBean.setAddTime(TimeUtil.currentTimeMillis());
                historyBean.setAddUser(String.valueOf(user.getUserId()));
                historyBean.setUpdateTime(TimeUtil.currentTimeMillis());
                historyBean.setUpdateUser(String.valueOf(user.getUserId()));
                //插入数据库
                int ress = historyMapper.addHistory(historyBean);
            }


        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }

    /**
     * 限制/允许登陆
     * @param request
     * @param roleId
     * @param loginStatue
     * @param roleName
     * @return
     */
    public  ResultMsg  loginRoleRes(HttpServletRequest request,long roleId,int loginStatue,String roleName) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_JSGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }
            int res = roleMapper.loginRoleRes(roleId, loginStatue);
            if (res <= 0) {
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("数据异常");
                return ret;
            }
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("操作成功");

            //如果操作日志的开关已经打开
            if(SwitchConfig.isOpen(SwitchConfig.ID_CZRZ)){
                String ip = IpUtil.getIpAddr(request);
                HistoryBean historyBean = new HistoryBean();
                if (loginStatue == 0) {
                    historyBean.setMessage("[" + user.getUserName() + "] 禁止了： [" + roleName + "]角色登陆");
                    historyBean.setType(Opt.YHGL_JSGL_JZDL);
                } else {
                    historyBean.setMessage("[" + user.getUserName() + "] 允许了： [" + roleName + "]角色登陆");
                    historyBean.setType(Opt.YHGL_JSGL_YXDL);
                }
                historyBean.setOpUserId(user.getUserId());
                historyBean.setIp(ip);
                historyBean.setBopId(String.valueOf(roleId));
                historyBean.setAddTime(TimeUtil.currentTimeMillis());
                historyBean.setAddUser(String.valueOf(user.getUserId()));
                historyBean.setUpdateTime(TimeUtil.currentTimeMillis());
                historyBean.setUpdateUser(String.valueOf(user.getUserId()));
                //插入数据库
                int ress = historyMapper.addHistory(historyBean);
            }



        } catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }


    /**
     * 删除角色
     * @param request
     * @param roleId
     * @param roleName
     * @return
     */
    public  ResultMsg  deleteRoler(HttpServletRequest request,long roleId,String roleName) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_JSGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }
            int res = roleMapper.deleteRoler(roleId);
            if (res <= 0) {
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("数据异常");
                return ret;
            }
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("删除成功");

            //如果操作日志的开关已经打开
            if(SwitchConfig.isOpen(SwitchConfig.ID_CZRZ)){
                String ip = IpUtil.getIpAddr(request);
                HistoryBean historyBean = new HistoryBean();
                historyBean.setMessage("[" + user.getUserName() + "] 删除了： [" + roleName + "]角色");
                historyBean.setType(Opt.YHGL_JSGL_SCJS);
                historyBean.setOpUserId(user.getUserId());
                historyBean.setIp(ip);
                historyBean.setBopId(String.valueOf(roleId));
                historyBean.setAddTime(TimeUtil.currentTimeMillis());
                historyBean.setAddUser(String.valueOf(user.getUserId()));
                historyBean.setUpdateTime(TimeUtil.currentTimeMillis());
                historyBean.setUpdateUser(String.valueOf(user.getUserId()));
                //插入数据库
                int ress = historyMapper.addHistory(historyBean);
            }


        } catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }


    /**
     * 设置权限
     * @param request
     * @param roleJson
     * @return
     */
    public  ResultMsg setPermission(HttpServletRequest request,String roleJson){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {

            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_QXPZ)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }
            Role role = JSON.parseObject(roleJson, Role.class);
            role.setUpdateUser(user.getUserId()+"");
            role.setUpdateTime(TimeUtil.currentTimeMillis());
            int res = roleMapper.setPermission(role);
            if(res <= 0){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("数据异常");
                return ret;
            }
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("保存成功");

            //如果操作日志的开关已经打开
            if(SwitchConfig.isOpen(SwitchConfig.ID_CZRZ)){
                //添加操作记录
                String ip = IpUtil.getIpAddr(request);
                HistoryBean historyBean = new HistoryBean();
                historyBean.setMessage("[" + user.getUserName() + "] 修改了： [" + role.getRoleName() + "]角色的权限");
                historyBean.setType(Opt.YHGL_QXPZ_SZJSQX);
                historyBean.setOpUserId(user.getUserId());
                historyBean.setIp(ip);
                historyBean.setBopId(String.valueOf(role.getRoleId()));
                historyBean.setAddTime(TimeUtil.currentTimeMillis());
                historyBean.setAddUser(String.valueOf(user.getUserId()));
                historyBean.setUpdateTime(TimeUtil.currentTimeMillis());
                historyBean.setUpdateUser(String.valueOf(user.getUserId()));
                //插入数据库
                int ress = historyMapper.addHistory(historyBean);
            }


        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }

    /**
     * 修改角色的名称和备注
     * @param request
     * @param roleId
     * @param roleName
     * @param rolelBz
     * @return
     */
    public  ResultMsg updateRoler(HttpServletRequest request,long roleId ,String roleName,String  rolelBz){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {

            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.YHGL_JSGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }

            //查询老的角色
            Role role =  roleMapper.getRoleByName(roleName);
            if(null != role){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("该角色已经存在");
                return ret;
            }

            int res =  roleMapper.updateRoler(roleId,roleName,rolelBz);
            if(res <= 0){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("数据异常");
                return ret;
            }
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("保存成功");

            //如果操作日志的开关已经打开
            if(SwitchConfig.isOpen(SwitchConfig.ID_CZRZ)){
                //添加操作记录
                String ip = IpUtil.getIpAddr(request);
                HistoryBean historyBean = new HistoryBean();
                historyBean.setMessage("[" + user.getUserName() + "] 修改了： [" + roleId + "]的角色信息");
                historyBean.setType(Opt.YHGL_QXPZ_XGJSXX);
                historyBean.setOpUserId(user.getUserId());
                historyBean.setIp(ip);
                historyBean.setBopId(String.valueOf(roleId));
                historyBean.setAddTime(TimeUtil.currentTimeMillis());
                historyBean.setAddUser(String.valueOf(user.getUserId()));
                historyBean.setUpdateTime(TimeUtil.currentTimeMillis());
                historyBean.setUpdateUser(String.valueOf(user.getUserId()));
                //插入数据库
                int ress = historyMapper.addHistory(historyBean);
            }
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }


    public ResultMsg updateTouristRole(HttpServletRequest request,String mz,String qp,String ylb) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {

            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.KHGL_YKGL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }

            TouristRole touristRole = new TouristRole();
                touristRole.setMz(mz);
                touristRole.setQp(qp);
                touristRole.setYlb(ylb);
                roleMapper.updateTouristRole(touristRole);
                 ret.setCode(ResultMsg.SUCESS);
                ret.setMsg("保存成功");

        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }

    public ResultMsg upCustomeRole(HttpServletRequest request, String roleStr,int customerUserId) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {

            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
//            if (!CheckTool.checkAuthority(user, AuthorityID.KHGL_KHRYXXYL)) {
//                ret.setCode(ResultMsg.ERROR);
//                ret.setMsg("你没有对应的操作权限");
//                return ret;
//            }


            roleMapper.upCustomeRole(roleStr,customerUserId);
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("保存成功");

        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }
}
